///******************************************************************************* // * Copyright (c) 2006, 2007 IBM Corporation and others. // * All rights reserved. This program and the accompanying materials // * are made available under the terms of the Eclipse Public License v1.0 // * which accompanies this distribution, and is available at // * http://www.eclipse.org/legal/epl-v10.html // * // * Contributors: // * IBM Corporation - initial API and implementation // *******************************************************************************/ // //package org.eclipse.ui.tests.manual; // //import java.beans.PropertyChangeListener; //import java.beans.PropertyChangeSupport; // //import org.eclipse.core.databinding.DataBindingContext; //import org.eclipse.core.databinding.beans.BeansObservables; //import org.eclipse.core.databinding.observable.Realm; //import org.eclipse.core.databinding.observable.value.IObservableValue; //import org.eclipse.core.runtime.Assert; //import org.eclipse.core.runtime.CoreException; //import org.eclipse.core.runtime.IProgressMonitor; //import org.eclipse.core.runtime.IStatus; //import org.eclipse.core.runtime.Status; //import org.eclipse.core.runtime.SubMonitor; //import org.eclipse.jface.databinding.swt.SWTObservables; //import org.eclipse.jface.dialogs.MessageDialog; //import org.eclipse.jface.layout.GridDataFactory; //import org.eclipse.jface.layout.GridLayoutFactory; //import org.eclipse.jface.resource.ImageDescriptor; //import org.eclipse.jface.window.IShellProvider; //import org.eclipse.swt.SWT; //import org.eclipse.swt.events.DisposeEvent; //import org.eclipse.swt.events.DisposeListener; //import org.eclipse.swt.widgets.Button; //import org.eclipse.swt.widgets.Composite; //import org.eclipse.swt.widgets.Group; //import org.eclipse.swt.widgets.Label; //import org.eclipse.swt.widgets.Text; //import org.eclipse.ui.IEditorInput; //import org.eclipse.ui.IEditorSite; //import org.eclipse.ui.IFileEditorInput; //import org.eclipse.ui.ISaveablePart; //import org.eclipse.ui.ISaveablesSource; //import org.eclipse.ui.PartInitException; //import org.eclipse.ui.PlatformUI; //import org.eclipse.ui.Saveable; //import org.eclipse.ui.internal.WorkbenchMessages; //import org.eclipse.ui.internal.WorkbenchPlugin; //import org.eclipse.ui.part.EditorPart; //import org.eclipse.ui.progress.IJobRunnable; // ///** // * @since 3.3 // * // */ //public class TestBackgroundSaveEditor extends EditorPart implements // ISaveablesSource { // // public class MySaveable extends Saveable { // // PropertyChangeSupport changeSupport = new PropertyChangeSupport(this); // // private boolean dirty; // // public void doSave(IProgressMonitor monitor) throws CoreException { // SubMonitor subMonitor = SubMonitor.convert(monitor, 2); // IJobRunnable runnable = doSave(subMonitor.newChild(1), getSite()); // if (runnable!=null) { // runnable.run(subMonitor.newChild(1)); // } // monitor.done(); // } // // public IJobRunnable doSave(IProgressMonitor monitor, // IShellProvider shellProvider) throws CoreException { // monitor.beginTask("Saving in the foreground", // data.foregroundSaveTime); // data.setOutput(""); // for (int i = 0; i < data.foregroundSaveTime; i++) { // if (monitor.isCanceled()) { // return null; // } // try { // Thread.sleep(1000); // } catch (InterruptedException e) { // Thread.currentThread().interrupt(); // } // data.setOutput(data.getInput().substring(0, // Math.min(i, data.getInput().length()))); // monitor.worked(1); // } // if (data.throwExceptionInForeground) { // throw new CoreException(new Status(IStatus.ERROR, // "org.eclipse.ui.tests", // "Saving in the foreground failed")); // } // monitor.done(); // if (!data.saveInBackground) { // data.setOutput(data.getInput()); // setDirty(false); // return null; // } // IJobRunnable result = new IJobRunnable() { // public IStatus run(IProgressMonitor monitor) { // monitor.beginTask("Saving in the background", // data.backgroundSaveTime); // for (int i = 0; i < data.backgroundSaveTime; i++) { // if (monitor.isCanceled()) { // return Status.CANCEL_STATUS; // } // try { // Thread.sleep(1000); // } catch (InterruptedException e) { // Thread.currentThread().interrupt(); // } // data.setOutput(data.getInput().substring( // 0, // Math.min(i + data.foregroundSaveTime, data // .getInput().length()))); // monitor.worked(1); // } // if (data.throwExceptionInBackground) { // return new Status(IStatus.ERROR, // "org.eclipse.ui.tests", // "Saving in the background failed"); // } // data.setOutput(data.getInput()); // setDirty(false); // monitor.done(); // return Status.OK_STATUS; // } // }; // return result; // } // // public boolean equals(Object object) { // return this == object; // } // // public ImageDescriptor getImageDescriptor() { // return input.getImageDescriptor(); // } // // public String getName() { // return input.getName(); // } // // public String getToolTipText() { // return input.getToolTipText(); // } // // public int hashCode() { // return System.identityHashCode(this); // } // // public boolean isDirty() { // return dirty; // } // // public void setDirty(boolean dirty) { // firePropertyChange("dirty", new Boolean(this.dirty), new Boolean( // this.dirty = dirty)); // getSite().getShell().getDisplay().syncExec(new Runnable(){ // public void run() { // TestBackgroundSaveEditor.this // .firePropertyChange(ISaveablePart.PROP_DIRTY); // }}); // } // // public void addPropertyChangeListener(String propertyName, // PropertyChangeListener listener) { // changeSupport.addPropertyChangeListener(propertyName, listener); // } // // void firePropertyChange(String propertyName, Object oldValue, // Object newValue) { // changeSupport.firePropertyChange(propertyName, oldValue, newValue); // } // // public void removePropertyChangeListener(String propertyName, // PropertyChangeListener listener) { // changeSupport.removePropertyChangeListener(propertyName, listener); // } // } // // private MySaveable mySaveable; // private Text inputText; // private IEditorInput input; // // public TestBackgroundSaveEditor() { // mySaveable = new MySaveable(); // } // // public void createPartControl(Composite parent) { // Realm realm = SWTObservables.getRealm(parent.getDisplay()); // final DataBindingContext dbc = new DataBindingContext(realm); // parent.addDisposeListener(new DisposeListener() { // public void widgetDisposed(DisposeEvent e) { // dbc.dispose(); // } // }); // // final IObservableValue inputObservable = BeansObservables.observeValue( // realm, data, "input"); // final IObservableValue outputObservable = BeansObservables // .observeValue(realm, data, "output"); // // createInputGroup(parent, dbc, inputObservable); // createOptionsGroup(parent, realm, dbc); // createOutputGroup(parent, dbc, outputObservable); // // GridLayoutFactory.swtDefaults().numColumns(3).equalWidth(true) // .generateLayout(parent); // } // // private void createOutputGroup(Composite parent, // final DataBindingContext dbc, // final IObservableValue outputObservable) { // Group outputGroup = new Group(parent, SWT.NONE); // outputGroup.setText("Output"); // Text outputText = new Text(outputGroup, SWT.BORDER | SWT.READ_ONLY // | SWT.MULTI); // GridDataFactory.fillDefaults().grab(true, true).applyTo(outputText); // dbc.bindValue(SWTObservables.observeText(outputText, SWT.NONE), // outputObservable, null, null); // GridLayoutFactory.swtDefaults().generateLayout(outputGroup); // } // // private void createOptionsGroup(Composite parent, Realm realm, // final DataBindingContext dbc) { // Group optionsGroup = new Group(parent, SWT.NONE); // optionsGroup.setText("Options"); // // Button dirtyButton = new Button(optionsGroup, SWT.CHECK); // new Label(optionsGroup, SWT.NONE).setText("Editor is dirty"); // IObservableValue dirtyObservable = BeansObservables.observeValue(realm, // mySaveable, "dirty"); // dbc.bindValue(SWTObservables.observeSelection(dirtyButton), // dirtyObservable, null, null); // // IObservableValue inputAndOutputDiffer = new ComputedValue(realm) { // // protected Object calculate() { // // return new Boolean(!Util.equals(inputObservable.getValue(), // // outputObservable.getValue())); // // } // // }; // // dbc.bindValue(dirtyObservable, inputAndOutputDiffer, null); // // Button saveInBackgroundButton = new Button(optionsGroup, SWT.CHECK); // new Label(optionsGroup, SWT.NONE) // .setText("Do part of the save in the background"); // dbc.bindValue(SWTObservables.observeSelection(saveInBackgroundButton), // BeansObservables.observeValue(realm, data, "saveInBackground"), // null, null); // // Button foregroundExceptionButton = new Button(optionsGroup, SWT.CHECK); // new Label(optionsGroup, SWT.NONE) // .setText("Throw exception while saving in the foreground"); // dbc.bindValue(SWTObservables // .observeSelection(foregroundExceptionButton), BeansObservables // .observeValue(realm, data, "throwExceptionInForeground"), null, null); // // Button backgroundExceptionButton = new Button(optionsGroup, SWT.CHECK); // new Label(optionsGroup, SWT.NONE) // .setText("Throw exception while saving in the background"); // dbc.bindValue(SWTObservables // .observeSelection(backgroundExceptionButton), BeansObservables // .observeValue(realm, data, "throwExceptionInBackground"), null, null); // // new Label(optionsGroup, SWT.NONE).setText("Foreground save time:"); // Text optionsForegroundTime = new Text(optionsGroup, SWT.BORDER); // dbc.bindValue(SWTObservables.observeText(optionsForegroundTime, // SWT.Modify), BeansObservables.observeValue(realm, data, // "foregroundSaveTime"), null, null); // // new Label(optionsGroup, SWT.NONE).setText("Background save time:"); // Text optionsBackgroundTime = new Text(optionsGroup, SWT.BORDER); // dbc.bindValue(SWTObservables.observeText(optionsBackgroundTime, // SWT.Modify), BeansObservables.observeValue(realm, data, // "backgroundSaveTime"), null, null); // // GridLayoutFactory.swtDefaults().numColumns(2).generateLayout( // optionsGroup); // } // // private void createInputGroup(Composite parent, // final DataBindingContext dbc, final IObservableValue inputObservable) { // Group inputGroup = new Group(parent, SWT.NONE); // inputGroup.setText("Input"); // // inputText = new Text(inputGroup, SWT.BORDER | SWT.MULTI); // dbc.bindValue(SWTObservables.observeText(inputText, SWT.Modify), // inputObservable, null, null); // // GridLayoutFactory.swtDefaults().generateLayout(inputGroup); // } // // public void doSave(IProgressMonitor monitor) { // try { // mySaveable.doSave(monitor); // } catch (CoreException e) { // String title = "Save failed"; // WorkbenchPlugin.log(title, new Status(IStatus.WARNING, // PlatformUI.PLUGIN_ID, 0, title, e)); // MessageDialog.openError(getSite().getShell(), // WorkbenchMessages.Error, title + ':' + e.getMessage()); // } // } // // public void doSaveAs() { // Assert.isTrue(false, "Should not be called"); // } // // public void init(IEditorSite site, IEditorInput input) // throws PartInitException { // if (!(input instanceof IFileEditorInput)) // throw new PartInitException( // "Invalid Input: Must be IFileEditorInput"); // setSite(site); // setInput(input); // this.input = input; // } // // public boolean isDirty() { // return mySaveable.isDirty(); // } // // public boolean isSaveAsAllowed() { // return false; // } // // public void setFocus() { // inputText.setFocus(); // } // // public static class Data { // PropertyChangeSupport changeSupport = new PropertyChangeSupport(this); // public String input = ""; // public String output = ""; // public String buffer; // public boolean saveInBackground; // public boolean throwExceptionInForeground; // public boolean throwExceptionInBackground; // public int foregroundSaveTime; // public int backgroundSaveTime; // // public String getOutput() { // return output; // } // // public void setOutput(String output) { // firePropertyChange("output", this.output, this.output = output); // } // // public void addPropertyChangeListener(String propertyName, // PropertyChangeListener listener) { // changeSupport.addPropertyChangeListener(propertyName, listener); // } // // void firePropertyChange(String propertyName, Object oldValue, // Object newValue) { // changeSupport.firePropertyChange(propertyName, oldValue, newValue); // } // // public void removePropertyChangeListener(String propertyName, // PropertyChangeListener listener) { // changeSupport.removePropertyChangeListener(propertyName, listener); // } // // /** // * @return Returns the input. // */ // public String getInput() { // return input; // } // // /** // * @param input // * The input to set. // */ // public void setInput(String input) { // this.input = input; // } // // /** // * @return Returns the buffer. // */ // public String getBuffer() { // return buffer; // } // // /** // * @param buffer // * The buffer to set. // */ // public void setBuffer(String buffer) { // this.buffer = buffer; // } // // /** // * @return Returns the saveInBackground. // */ // public boolean isSaveInBackground() { // return saveInBackground; // } // // /** // * @param saveInBackground // * The saveInBackground to set. // */ // public void setSaveInBackground(boolean saveInBackground) { // this.saveInBackground = saveInBackground; // } // // /** // * @return Returns the throwExceptionInForeground. // */ // public boolean isThrowExceptionInForeground() { // return throwExceptionInForeground; // } // // /** // * @param throwExceptionInForeground // * The throwExceptionInForeground to set. // */ // public void setThrowExceptionInForeground( // boolean throwExceptionInForeground) { // this.throwExceptionInForeground = throwExceptionInForeground; // } // // /** // * @return Returns the throwExceptionInBackground. // */ // public boolean isThrowExceptionInBackground() { // return throwExceptionInBackground; // } // // /** // * @param throwExceptionInBackground // * The throwExceptionInBackground to set. // */ // public void setThrowExceptionInBackground( // boolean throwExceptionInBackground) { // this.throwExceptionInBackground = throwExceptionInBackground; // } // // /** // * @return Returns the foregroundSaveTime. // */ // public int getForegroundSaveTime() { // return foregroundSaveTime; // } // // /** // * @param foregroundSaveTime // * The foregroundSaveTime to set. // */ // public void setForegroundSaveTime(int foregroundSaveTime) { // this.foregroundSaveTime = foregroundSaveTime; // } // // /** // * @return Returns the backgroundSaveTime. // */ // public int getBackgroundSaveTime() { // return backgroundSaveTime; // } // // /** // * @param backgroundSaveTime // * The backgroundSaveTime to set. // */ // public void setBackgroundSaveTime(int backgroundSaveTime) { // this.backgroundSaveTime = backgroundSaveTime; // } // } // // private Data data = new Data(); // // public Saveable[] getActiveSaveables() { // return new Saveable[] { mySaveable }; // } // // public Saveable[] getSaveables() { // return new Saveable[] { mySaveable }; // } // //}